﻿using System;
using Zadani09.db;
using Zadani09.db.DAO;
using Zadani09.util;

namespace Zadani09.design
{
    public partial class Anonym : System.Web.UI.MasterPage
    {

        protected void Page_Init(object sender, EventArgs e)
        {
            LoginButton.Click += new EventHandler(LoginButton_Click);
            LogoutButton.Click += new EventHandler(LogoutButton_Click);
        }

        void LogoutButton_Click(object sender, EventArgs e)
        {
            //smazani informace o uzivateli
            smazZeSession(Constants.PRIHLASENY_ADMIN);
            smazZeSession(Constants.PRIHLASENY_UZIVATEL);
            smazZeSession(Constants.PRIHLASENY_UMELEC);
            ErrorLabel.Text = string.Empty;
            LoginTextBox.Text = string.Empty;
            HesloTextBox.Text = string.Empty;
        }

        void LoginButton_Click(object sender, EventArgs e)
        {
           //zvlastni handler, kvuli pripadnym dalsim formularim na "podstrankach" sablony, aby se to
           //nemuselo resit nekde v if(IspostBack)  vetvi nekde..

            //posbirame obsah komponent ze stranky
            string login = LoginTextBox.Text.Trim();
            string heslo = HesloTextBox.Text.Trim();
            //tady je nutne vytahnout hodnotu z requestu, neni to server-side komp.
            string jeAdmin = this.Request.Form.Get("jeAdmin");
            bool admin = (jeAdmin == null)?false:true;
            //nevim proc, ale todle mi nejede..
            //string isAdmin = this.Request.QueryString.Get("jeAdmin");

            //porovname hodnoty s databazi
            Uzivatel u = DAOTovarna.instance.getUzivatelDAO().zkontrolujLogin(login, heslo, admin);
            //overeneni jestli je to opravdu clovek admin, nechavam na DAO tride, zatim to neni jak zjistit, chybi
            //v db flag na to..

            //nutne pouziti serializovatelneho objektu
            UzivatelSerializable uzivatel = null;
            if (u == null)
            {

            }
            else
            {
               uzivatel = new UzivatelSerializable(u);
            }

            if (uzivatel == null)
            {
                ErrorLabel.Text = "Chybné jméno nebo heslo !";
                LoginTextBox.Text = string.Empty;
                HesloTextBox.Text = string.Empty;

                //this.ClearChildState();
            }
            else
            {
                if (admin && login.Equals("admin"))
                {
                    vlozDoSession(Constants.PRIHLASENY_ADMIN, uzivatel);

                    //forward na admin cast
                  //  this.Server.Transfer("~/admin/Default.aspx");
                    this.Server.Transfer("~/Redir.aspx?kam=admin");
                }
                else
                {
                    if (uzivatel.LoginUzivatel.Equals("umelec"))
                    {
                        vlozDoSession(Constants.PRIHLASENY_UMELEC, uzivatel);
                       // this.Server.Transfer("~/umelec/Default.aspx");
                        this.Server.Transfer("~/Redir.aspx?kam=umelec");
                    }
                    else
                    {
                        vlozDoSession(Constants.PRIHLASENY_UZIVATEL, uzivatel);
                    }
                }
            }
        
        }

        protected override void OnPreRender(EventArgs e)
        {
            if (jePrihlasenyAdmin())
            {
                LoginPanel.Visible = false;
                LogoutPanel.Visible = true;
                UzivatelSerializable admin = (UzivatelSerializable)ziskejZeSession(Constants.PRIHLASENY_ADMIN);

                IDLabel.Text = admin.IDUzivatel.ToString();
                JmenoLabel.Text = admin.Jmeno;

                schovatRegistraci();
            }

            if (jePrihlasenyUzivatel())
            {
                LoginPanel.Visible = false;
                LogoutPanel.Visible = true;
                UzivatelSerializable uzivatel = (UzivatelSerializable)ziskejZeSession(Constants.PRIHLASENY_UZIVATEL);

                IDLabel.Text = uzivatel.IDUzivatel.ToString();
                JmenoLabel.Text = uzivatel.Jmeno;

                schovatRegistraci();
            }

            //pokud neni prihlaseny nikdo pak zobrazit jen login panel

            if (!jePrihlasenyAdmin() && !jePrihlasenyUzivatel())
            {
                LogoutPanel.Visible = false;
                LoginPanel.Visible = true;

                zobrazitRegistraci();
            }

            base.OnPreRender(e);
        }

        protected void Page_Load(object sender, EventArgs e)
        {
           
        }

        private void vlozDoSession(string key, object o)
        {
            this.Context.Session[key] = o;
        }

        private object ziskejZeSession(string key)
        {
            return (this.Context.Session[key]);
        }

        private void smazZeSession(string key)
        {
            this.Context.Session[key] = null;
        }
       
        private bool jePrihlasenyUzivatel()
        {
            if (ziskejZeSession(Constants.PRIHLASENY_UZIVATEL) != null) return (true);

            return (false);
        }

        private bool jePrihlasenyAdmin()
        {
            if (ziskejZeSession(Constants.PRIHLASENY_ADMIN) != null) return (true);

            return (false);
        }

        private void zobrazitRegistraci()
        {
            Panel1.Visible = true;
        }

        private void schovatRegistraci()
        {
            Panel1.Visible = false;
        }

        

    }
}
